package com.ytjj.qmyx.mall.service;

import com.ytjj.common.model.UsersResponse;
import com.ytjj.common.enums.CounponMoneyEnum;
import com.ytjj.qmyx.mall.model.*;
import com.ytjj.qmyx.mall.model.request.*;
import com.ytjj.qmyx.mall.model.response.*;
import com.ytjj.qmyx.mall.model.vo.ChannelVO;

import java.math.BigDecimal;
import java.util.List;
import java.util.Map;

/**
 * 公共服务接口
 *
 *
 * @version 1.0
 *
 */
public interface CommonService {



    /**
     * 根据类型获取广告列表
     *
     * @param type
     * @return
     */
    List<BannersResponse> getBannersListByType(String type);

    /**
     *
     * @param type
     * @return
     */
    BannersResponse getBannersInfoByType(String type);

    /**
     * 获取系统配置值
     * @param key
     * @return
     */
    String getSysConfigValue(String key);

    /**
     * 获取最新版本信息
     *
     * @param type
     * @return
     */
    Map<String,VersionResponse> getVersionsInfo(String type,String version);

    VersionResponse getVersion(String type,String versionNo);

    /**
     * 提交反馈信息(敏感信息过滤)
     *
     * @param feedbackRequest
     */
    void submitIdea(FeedbackRequest feedbackRequest);


    void saveAnalysisData(UsersAnalysisRequest usersAnalysisRequest, UsersResponse usersResponse);

    void extraAnalysisData(ExtraAnalysisRequest extraAnalysisRequest,String channel);

    ShareInfoResponse shareInfo(String path,String param);

    PageButton getPageButton(String activityType, String type);

    Map<String,Object> getWxConfigure();

    Map<String, Object> gtPushInfoByCid(GtPushRequest gtPushRequest);

    void getCidInfo(CidInfoRequest cidInfoRequest,UsersResponse usersResponse);

    void getCustomerCollect(CustomerCollectRequest customerCollectRequest);

    List<PhoneRechargeConfig> getPhoneChargesList();

    List<PhoneRecharge> rechargeList();

    ForumLiveResponse getforumLiveData();

    /**
     * 获取h5生活馆模型
     * @return
     */
    ForumLiveResponse getH5ForumLiveData();

    /**
     * 描述数据模型
     * @return
     */
    SeckillDataResponse querySeckillData();

    /**
     * 秒杀
     * @return
     */
    List<ProductResponse> querySeckillList();

    /**
     * 积分商品数据模型
     * @return
     */
    List<ProductResponse> queryCashScoreList();

    /**
     * 新品推荐
     */
    List<ProductResponse> queryNewProductList();

    /**
     * 以旧换新
     * @return
     */
    List<ProductResponse> queryOldForNewList();

    /**
     * 品牌商品
     * @return
     */
    List<BrandProductResponse> queryBrandProductList();

    /**
     * 0元测评商品
     * @return
     */
    List<ProductResponse> queryZeroProductList();

    /**
     * 优惠券
     * @return
     */
    List<ProductResponse> queryCashCouponList();

    /**
     * 抄底捡漏
     * @return
     */
    PickUpLeakResponse queryPickUpLeak();

    List<FakeUserAndImg> getFakeUsersAndImg(List<Object> fakeUserList, Long number);

    List<FakeUsersAndProduct> getFakeUsersAndProduct(List<Object> fakeUserList);

    String skipApplets(String code,String channel,String accessToken,Integer pid);

    String skipAppletsByPath(String path,String channel,String accessToken);
    String skipAppletsByPath(String path,String channel, String query,String accessToken);

    Map<String, Object> getInfoByChannel(String channel);

    /**
     * 添加用户余额
     *
     * @param userId
     * @param type
     */
    String addUserBalance(Integer userId, CounponMoneyEnum type);

    String backZeroEvaluationCapitalMoney(Integer userId, CounponMoneyEnum type, BigDecimal money);

    int doGiveScore(Integer userId, CounponMoneyEnum type);

    Object getCounponList(Integer userId);

    /**
     * 根据专区id去查询品牌列表
     * @param pageNum
     * @param pageSize
     * @param specialId
     * @return
     */
    List<BrandListResponse> getBrandPavilionList(Integer pageNum, Integer pageSize, Integer specialId);

    /**
     * 品牌内页
     * @param pageNum
     * @param pageSize
     * @param id
     * @param platformData
     * @return
     */
    BrandInfoResponse getBrandPavilionInfo(Integer pageNum, Integer pageSize, Integer id,String platformData);

    public ChannelVO findChannel(String channel);
}
